/**
 * 尝试使用类的形式对echarts的工作进行封装
 * 
 * @author XuGaoran
 * @since 1.0.0
 * @version 1.0.0
 */
import * as echarts from "echarts/core";

/**
 * 创建一个方便echarts使用的类，在这里我们只需要关注需要传入哪些组建，和options的编写方式
 */
export class EchartsClass {
  /* echarts实例对象 */
  echartsIns = null;

  /* 存放渲染需要的options */
  options = {};

  /**
   * 构造器函数
   * 
   * @param {HTMLElement} element 当前组建中的元素
   * @param {list} comps 需要注册的组件
   */
  constructor(element) {
    // 初始化图表
    this.initCharts(element);
  }

  /**
   * 对当前对象中的echartsIns进行实例化
   *
   * @param {HTMLElement} element 当前组建中的元素
   */
  initCharts(element) {
    if (this.echartsIns) {
      return;
    }
    // 注册组件
    this.echartsUse();
    // 初始化图表
    this.echartsIns = echarts.init(element);
  }

  /**
   * 设置options，该方法需要被继承的类覆写
   *
   * @param {Object} response 响应数据
   * @returns options 需要返回可以被Echarts使用的options
   */
  setOption(response) {
    return {};
  }

  /**
   * 需要重载的方法，写入到底导入什么样的组件
   */
  echartsUse() {
    echarts.use([]);
  }

  /**
   * 刷新表格并重新渲染图表
   *
   * @param {Object} response 响应
   */
  updateCharts(response) {
    if (!this.echartsIns) {
      return;
    }
    // 重新设置配置类
    this.options = this.setOption(response);
    // 对图进行渲染
    this.echartsIns.setOption(this.options);
  }
}
